package com.eugenema.entity;

import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.StringUtils;
import com.eugenema.enumEntity.Locator;
import com.eugenema.enumEntity.StepAction;

/**
 * 动作
 * <br/>对应 XML 文件中的 step 元素
 *
 * @author Eugenema
 * @date 2023/3/11 10:40
 **/
public class TestStep extends TestBase {
    /**
     * 当前动作的行为，调用 StepAction 中的方法
     */
    private StepAction action;
    /**
     * Action 行为对应的元素定位，属性名=属性值
     * <br/>除 id 外，其余均可能获取多个元素
     **/
    private Locator locator;
    /**
     * Action 行为对应所需要传递的参数值
     */
    private String value;
    /**
     * Action 行为对应所需要传递的循环次数及间隔时间：次数*间隔（秒）
     */
    private String forTimes;
    /**
     * 模拟 Windows 键盘按键操作的键值，单个特殊按键（非英文字母）
     */
    private String key;
    /**
     * 第二特殊按键，为了处理 Shift + Tab 等快捷键
     */
    private String keys;
    /**
     * 检测结果的预期值
     */
    private String expect;
    /**
     * 检测结果不匹配时的提示信息
     */
    private String message;
    /**
     * 要操作的 Excel 文件名，包括扩展名
     */
    String operationFileName;
    /**
     * 要操作的 sheet 表名
     */
    String sheetName;
    /**
     * 模板 Excel 文件名，包括扩展名
     */
    String templateFileName;
    /**
     * Excel 映射的实体类
     */
    Class excelEntity;
    /**
     * 要写入 Excel 的数据，EL 表达式
     */
    String dataListEL;
    /**
     * 读取 Excel 文件的监听
     */
    ReadListener readListener;
    /**
     * 行样式列表
     */
    String writeCellStyleListEL;
    /**
     * 自定义列宽度，以逗号隔开（列索引（从 0 开始）, 列宽度）
     */
    String customColumn;


    public StepAction getAction() {
        return action;
    }

    public void setAction(StepAction action) {
        this.action = action;
    }

    public Locator getLocator() {
        return locator;
    }

    public void setLocator(Locator locator) {
        this.locator = locator;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getKeys() {
        return keys;
    }

    public void setKeys(String keys) {
        this.keys = keys;
    }

    public String getExpect() {
        return expect;
    }

    public void setExpect(String expect) {
        this.expect = expect;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getOperationFileName() {
        return operationFileName;
    }

    public void setOperationFileName(String operationFileName) {
        this.operationFileName = operationFileName;
    }

    public String getSheetName() {
        return sheetName;
    }

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public String getTemplateFileName() {
        return templateFileName;
    }

    public void setTemplateFileName(String templateFileName) {
        this.templateFileName = templateFileName;
    }

    public Class getExcelEntity() {
        return excelEntity;
    }

    public void setExcelEntity(Class excelEntity) {
        this.excelEntity = excelEntity;
    }

    public String getDataListEL() {
        return dataListEL;
    }

    public void setDataListEL(String dataListEL) {
        this.dataListEL = dataListEL;
    }

    public ReadListener getReadListener() {
        return readListener;
    }

    public void setReadListener(ReadListener readListener) {
        this.readListener = readListener;
    }

    public String getWriteCellStyleListEL() {
        return writeCellStyleListEL;
    }

    public void setWriteCellStyleListEL(String writeCellStyleListEL) {
        this.writeCellStyleListEL = writeCellStyleListEL;
    }

    public String getCustomColumn() {
        return customColumn;
    }

    public void setCustomColumn(String customColumn) {
        this.customColumn = customColumn;
    }

    @Override
    public String toString() {
        return String.format("TestStep【id：%s，描述：%s，动作：%s】", getId(), getDesc(), getAction().getDesc());
    }

    /**
     * 返回解析后的循环次数、间隔
     * 若参数为空，则返回 null
     *
     * @author 马寅广
     * @date 2023/10/18 14:02
     *
     *
     * @return int[0]：循环次数；int[1]：间隔
     **/
    public int[] getForTimesIntArray() {
        if (StringUtils.isNotBlank(forTimes)) {
            String[] parts = forTimes.split("\\*");
            int[] intParts = new int[parts.length];
            for (int i = 0; i < parts.length; i++) {
                intParts[i] = Integer.parseInt(parts[i]);
            }
            return intParts;
        }
        return null;
    }

    public String getForTimes() {
        return forTimes;
    }

    public void setForTimes(String forTimes) {
        this.forTimes = forTimes;
    }
}
